/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ejemplo.bt.cuentas.services;

import com.core.bs.BusinessException;
import com.core.pf.PersistentBroker;
import com.core.pf.PersistentException;
import com.core.pf.RetrieveCriteria;
import com.ejemplo.bt.cuentas.vo.Cuenta;
import com.ejemplo.bt.usuarios.vo.Usuario;
import java.util.List;

/**
 *
 * @author Usuario
 */
public class CuentaServices {
    
    // Eliminar
    public void eliminarCuenta(long idCuenta) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Cuenta.class);
            criteria.addPkToCriteria(new Long(idCuenta));
            
            PersistentBroker broker = new PersistentBroker();
            broker.deleteObject(criteria);
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }

    
    // Obtener una cuenta
    public Cuenta obtenerCuenta(long idCuenta) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Cuenta.class);
            criteria.addPkToCriteria(new Long(idCuenta));
            
            PersistentBroker broker = new PersistentBroker();
            Cuenta cuenta = (Cuenta) broker.retrieveObject(criteria);
            
            return cuenta;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    
    // Obtener una cuenta
    public Cuenta obtenerCuentaPorNro(long nroCuenta) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Cuenta.class);
            criteria.addEqualToCriteria("nroCuenta", nroCuenta);
            
            PersistentBroker broker = new PersistentBroker();
            Cuenta cuenta = (Cuenta) broker.retrieveObject(criteria);
            
            return cuenta;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    
    
   // Obtener todas las cuentas
    public List<Cuenta> obtenerCuentas() throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Cuenta.class);
            criteria.addOrder("idCuenta", RetrieveCriteria.ASCENDING);

            PersistentBroker broker = new PersistentBroker();
            List<Cuenta> cuentas = broker.processCriteria(criteria);
            
            return cuentas;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    
    public List<Cuenta> obtenerCuentasUsuario(/*long idCliente*/Usuario cli) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Cuenta.class);
           // Usuario cli = buscarCliente(idCliente);
            criteria.addEqualToCriteria("cliente", cli);
            criteria.addOrder("idCuenta", RetrieveCriteria.ASCENDING);

            PersistentBroker broker = new PersistentBroker();
            List<Cuenta> cuentas = broker.processCriteria(criteria);
            
            return cuentas;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    public Usuario buscarCliente(long idCliente) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
            
            criteria.addPkToCriteria(idCliente);
            
            PersistentBroker broker = new PersistentBroker();
            List usuarios = broker.processCriteria(criteria);

	     Usuario cli = null;

	     if(usuarios.size() > 0)
	     	   cli = (Usuario) usuarios.get(0);
	     else
	         throw new BusinessException("Login invalido\n");

            return cli;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    


    // Salvar una cuenta
    public Cuenta salvarCuenta(Cuenta cuenta) throws BusinessException {
        try {
            PersistentBroker broker = new PersistentBroker();
            if(cuenta.getIdCuenta()==0){
                broker.saveObject(cuenta);
            }else{
                broker.updateObject(cuenta);
            }
            
            
            return cuenta;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    
   

    /**
     *
     * @param user
     * @param password
     * @return
     * @throws BusinessException
     * @throws RemoteException
     */
   /* public Cuenta obtenerUsuario(String user, String password)
			throws BusinessException {
	try {
	     RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
	     criteria.addEqualToCriteria("documento", user);
	     criteria.addEqualToCriteria("pin", password);

	     PersistentBroker broker = new PersistentBroker();
	     List usuarios = broker.processCriteria(criteria);

	     Usuario usuario = null;

	     if(usuarios.size() > 0)
	     	   usuario = (Usuario) usuarios.get(0);
	     else
	         throw new BusinessException("Login invalido\n");

	     return usuario;
        }
        catch(PersistentException pex) {
	            throw new BusinessException(pex);
        }
    }*/
    
   
}
